# -*- coding: utf-8 -*-
import os
import time
import jieba
from model import PhraseDiscovery
from utils import get_stopwords, load_dictionary, generate_ngram, save_model, load_model
from config import model_dump_file

# def load_data(filename, stopwords):
#     """
#     :param filename:
#     :param stopwords:
#     :return: 二维数组,[[句子1分词list], [句子2分词list],...,[句子n分词list]]
#     """
#     start = time.time()
#     print('------> stopwords start...')
#     data = []
#     with open(filename, 'r', encoding='utf-8') as f:
#         for line in f:
#             word_list = [x for x in jieba.cut(line.strip(), cut_all=False) if x not in stopwords]
#             data.append(word_list)
#     f.close()
#     print('------> stopwords end...', 'time last:', time.time()-start)
#
#     return data
#
#
# def gen_ngram_and_add(data):
#     """
#     生成1到3阶词组合列表ngram，添加到discovery计算模型
#     :param data:
#     :return:
#     """
#     start = time.time()
#     print('------> gen_ngram_and_add start...')
#     for word_list in data:
#         # tmp 表示每一行自由组合后的结果（n gram）
#         # tmp: [['它'], ['是'], ['小'], ['狗'], ['它', '是'], ['是', '小'], ['小', '狗'], ['它', '是', '小'], ['是', '小', '狗']]
#         ngrams = generate_ngram(word_list, 3)
#         for d in ngrams:
#             discovery.add_words(d)
#     print('------> gen_ngram_and_add end...', 'time last:', time.time()-start)


if __name__ == "__main__":

    # 初始化discovery模块工具
    if os.path.exists(model_dump_file):
        discovery = load_model(model_dump_file)  # 从缓存加载对象
    else:
        discovery = PhraseDiscovery() # 新建对象
        save_model(discovery, model_dump_file)

        # dict_name = basedir + '/data/dict.txt'
        # word_freq = load_dictionary(dict_name)
        # discovery = PhraseDiscovery(word_freq)
        # save_model(discovery, root_name)

    # 加载新的文章
    discovery.add_parse_file('data/blockchainnews.txt')

    # filename = 'data/demo.txt'
    # #filename = 'data/blockchainnews.txt'
    # data = load_data(filename, discovery.stopwords)
    # # 将新的文章插入到Root中
    # gen_ngram_and_add(data)


    # 定义取TOP 100个
    topN = 100
    result = discovery.discovery_phrase(topN)

    # 如果想要调试和选择其他的阈值，可以print result来调整
    # print("\n----\n", result)
    print("\n----\n", 'get %d new words, words and score: \n' % len(result))
    print('#############################')
    f = open('output.txt', 'w', encoding='utf-8')
    for node in result:
        print(node.parent.word, node.word, ' ---->  ', node.SC)
        f.write(node.parent.word+'_'+node.word)
        f.write(" ")
        f.write(str(node.SC))
        f.write("\n")
    f.close()
    print('#############################')

    # 前后效果对比
    #test_sentence = '任职要求：1、统计、计算机、通信、物联网、电子、数学、自动化等相关专业大专以上学历，可接受应届毕业生；2、应届毕业生。其专业有志于从事大数据分析相关工作。3、有java语言基础者优先；4、热爱大数据行业的人员,注重团队协作精神。薪资待遇：1、工作时间朝九晚六，周末双休，公司为员工免费提供住宿。2、试用期：蚂蚁金服，3个月，优秀者可提前申请转正；3、正式入职可享有月薪不低于4000-6000元/月收入；4、公司工作环境优雅、氛围好，同事关系融洽，生日派对、聚餐等活动丰富；5、公司注重员工培养，给予晋升机会，管理层主要在员工中培养、提拔。职位描述1、熟悉Linux操作指令及Linux文件系统；2、了解Hadoop平台结构，数据清洗流程及工具使用者优先；3、熟练使用hive/spark"任职要求1、本科及以上学历，理工科相关专业，(数学计算机专业优先）2、熟悉主流开发语言。3、优秀的逻辑分析能力和数据敏感性。4、较强的学习能力，善于探索钻研。5、本岗位欢迎本科及以上学历优秀应届毕业生。薪资福利：1、起薪不低于4500元；2、五险一金、年底双薪、项目奖金、年终奖金、特别奖励、培训发展；3、8小时工作制，周末双休、年度免费体检、带薪休假旅游、过节补贴等。任职要求：1、大学本科及以上学历2、入职前接受2个左右的岗前技能培训"1.梳理运营与推广的业务需求，制定数据报表；2.挖掘数据背后的市场方向、规律、短板，为业务提供决策依据；3.针对具体的业务事件，研究业务开拓中的局限性或亮点，进行数据分析并提出优化方案或提炼可复制的模板；4.分析运营与推广需求，固化常规数据报表，提升数据支持运营与推广的能力；5.通过数据分析工具，高效支持业务端的数据查询需求，包括经营数据，会员数据的查询；6.数据研究与分析，通过挖掘数据的内在关系，发现运营与推广中的问题，并推动问题的解决；7、满足业务方对数据的各类取、过滤、分析等需求。岗位需求：1、沟通能力佳，且具备服务意识；2、具一定专案规划与推进能力；3、具备一定的PB/C+/PLSQL开发能力，熟悉SQL/ORACLE数据库；4、35周岁以下，数学、统计学、经济学、金融相关专业本科及以上学历。"工作职责:1.为大型儿童智能设备系统提供大数据分析和数据挖掘解决方案2.对于海量数据进行数据清理，分析和评估。3.能够针对需求开发数据分析方案，包括统计模型的建立，方案的开发，包括从设计，开发到实施的过程。4.能够将分析结果用书面文字和口头的方法进行技术性和非技术性的人员进行顺畅的交流。5.能够用有效的方法对于统计模型方案的实施进行核实和验证。6.能够为销售和市场营销人员提供数据分析来帮助售前。7.能对现有产品提供改进方案，并协助数据类和分析类新产品的开发任职资格:1.至少一年的数据清理，评估，统计模型和分析经验，Cloud和Linux系统操作经验。2.学士以上学位，硕士以上更佳，计算机，统计，数学相关学科。3.能够有效地执行分析类项目。4.突出的口头交流和文字表达能力，能够将分析方法论和结果进行有效交流。5.要有高度责任心，团队精神，和讲演能力。加分技能：1.熟悉Hadoop，Spark等大数据分析技术2.熟悉TensorFlow等深度学习平台"岗位职责：1.本岗位负责大数据分析产品的算法的研发、典型分析应用设计以及行业/企业的数据分析项目的实施；2.利用先进的数据分析技术，去解决典型的行业挑战；从行业的大数据分析需求，抽象提升新型数据分析问题和算法；基于大数据基础平台（如Spark/Hadoop)或并行计算环境，实现高效的数据挖掘算法。岗位要求：1.精通数据挖掘/机器学习算法，有丰富的实践经验；2.至少精通一种数据分析软件工具（如SAS,SPSSModeler,R,Weka等）；3.有一定程序开发经验（Java,C++等）；4.具有清晰的系统思维逻辑，对解决行业实际问题有浓厚兴趣；5.良好的沟通和分析问题与解决问题能力；6.有数据挖掘项目经验者优先。备注：此岗位为重庆机电装备研究院提供。"1、主要从事基于机器学习（深度学习）的WEB安全攻击检测、大数据分析等方面的算法研究与开发工作；2、参与设计相关算法的数据处理、训练、推理等过程的系统架构，提升算法系统的性能和业务指标；3、使用包括深度学习在内的最新算法在模式识别、WEB安全等领域的研发和创新。职位要求：1.全日制本科或以上学历，计算机、数学相关专业优先；2.精通常用算法和数据结构，对机器学习算法有较强的实践能力，熟悉基于GPU/CPU的相关机器学习算法，熟悉WEB安全攻击检测技术者优先；3.熟练使用Python编程语言，熟练使用Linux系统；4.熟悉TensorFlow深度学习框架；5.1年以上机器学习研发与业务应用经验，对机器学习算法原理有深刻理解，有丰富的机器学习、深度学习算法应用经验；6.熟悉Hadoop优先。我们为您提供：1、合理的薪酬绩效体系，完善的人才培养机制及晋升机制；2、五险一金及带薪年假；3、节假日礼赞+春节礼赞+员工生日会+官方微信福利；4、优秀团队旅游+员工拓展+茶欢会+部门活动餐饮基金；5、完善的人才培养机制及晋升机制；6、具竞争力的薪酬机制+年终激励奖金。联系我们：官网：www.norgin.com;联系电话：02151699669;邮箱：HR@norgin.com地址：上海市闸北区柳营路305号;附近线路：A、地铁8号线西藏北路站；B、地铁1号线延长路站；　　　　　C、柳营路平型关路站：98路、108路、518路。"Keep——自由运动场AppStore年度精选#昨天害怕的借口，今天热血的理由#Keep作为一家全球化的运动科技公司，成立三年以来，聚集了大批热爱运动的技术Geek和有趣的产品经理。团队成员具有良好的教育和从业背景，但那仅仅是起点，我们在技术创新的道路上从未止步，仅在Hackathon就产生了大量技术创新产品。基于海量的运动行为数据，Keep将发展运动领域最为专业的AI技术，帮助人们更好的运动，并实现产品效率的持续提升，打造科技互联的运动生态。当运动成为一种健康的生活方式，我们将努力做的更多。Keep拥有强大的运动课程研发团队，基于优秀的教育经历和学习能力，团队成员不仅具备系统的运动健身知识，同时是出色的互联网运营专家。Keep已经累计帮助用户训练70亿分钟，记录跑步8500万公里，燃烧450亿千卡热量。Keep荣获AppStore2015年度精选，中国区AppleStore预装DemoApp，长期占据健康健美分类榜第一名，总榜前50名。2017年03月，AppleCEOTimCook访问Keep北京总部。自2018年以来，Keep海外版也持续受到AppStore和GooglePlay在多个国家的推荐。2018年06月，Keep完成由高盛领投，腾讯、GGV纪源资本、晨兴资本、BAI跟投的1.27亿美元的D轮融资。「自律给我自由」是品牌slogan，也是Keep文化的一部分。我们倡导健康的生活方式，在追求极致的同时追求高效，以感恩务实的心态面对工作。我们不提倡加班，但是追求自律和负责任的创业精神，期望实现各自承诺的工作目标，并通过持续的提升效率和技术创新来避免和减少加班。Keepoffice在平安大街亮点设计中心，地铁5号线张自忠路站C口往东300米即到。这里有潮酷的设计空间，也有24小时免费使用的健身房瑜伽室和淋浴设施，既有举铁达人，也有专业跑者，既有瑜伽大师，也有骑行能手。在这里，无论是工程师还是产品经理，无论是设计师还是市场运营，他们都有共同的爱好，就是运动。选择一家优秀公司？或者加入Keep，共同创造一家伟大的运动科技公司！Keep作为一家全球化的运动科技公司，深耕于运动科技领域，荣获AppStore年度精选，全球用户累计突破1.3亿，并已完成1.27亿美元D轮融资，投资方包括高盛、腾讯、GGV、晨兴资本、BAI等机构。期待你的加入，共同创造一家伟大的运动科技公司！职位介绍「岗位职责：希望由你来做」1.组织督查日常的服务运营工作，并带领团队按照公司的要求和计划，完成对用户的跟进服务工作；2.对数据敏感，具备大数据分析能力，能深入分析运营数据，撰写运营分析报告；3.熟悉排班和质量管理；4.具备组织培训能力，提升员工能力，管控团队的质量和效率5.带领团队达成续费及推荐；6.负责团队成员的工作热情，稳定性，员工关怀，以及正确的公司价值观的传递，减少人员流失；7.完成上级安排的其他工作事宜。「任职要求：我们需要的你」1.专科及以上学历；2.2年以上管理经验；3.有跨部门沟通协调能力和项目推进能力；4.能够领导团队，并激发团队达成绩效目标；5.有良好的数据分析能力和敏感度；6.对健康.体育.饮食.医学感兴趣者优先。薪酬福利1.年度12薪+绩效奖金，并有机会获得股票期权；2.全额缴纳的六险一金，年度免费健康体检；3.入职即享5天年假标准；4.餐补；5.国家高新技术企业认证，可协助申请《北京市工作居住证》；6.周末双休且不提倡加班，各种课程内测福利，优先配备苹果电脑MacBook文化氛围我们提倡的价值观是：做人，正直、感恩做事，高效、极致面向未来，开放、创新「自律给我自由」是品牌slogan，也是Keep文化的一部分。我们倡导健康的生活方式，在追求极致的同时追求高效，以感恩务实的心态面对工作。我们不提倡加班，但是追求自律和负责任的创业精神，期望实现各自承诺的工作目标，并通过持续的提升效率和技术创新来避免和减少加班。#昨天害怕的借口，今天热血的理由#公司坐标Keep总部在北京市东城区东四十条94号亮点设计中心A座5层，地铁5号线张自忠路站C口往东300米即到"1. 拟定集团智能化营运策略、规划发展方向，并负责协调达成2. 制定智能化营运及大数据领域技术规划3. 智能化营运核心团队的组建与管理任职资格1. 本科以上学历，机械、电气自动化等相关专业2. 对整个智能制造方案规划有丰富经验，对大数据分析有一定经验　3. 10年以上工作经验，具MES专业背景，熟悉工业4.0、自动化、APS、ERP4. 沟通协调能力突出，有团队和项目管理经验"岗位职责：1.负责公司电商平台、大数据分析平台、服务中台等业务等系统规划和产品方案设计，制定产品研发路线图。2.开展需求调研，收集整理用户需求，独立完成产品PRD文档和原型设计。3.与技术人员沟通需求，讨论解决方案，完成产品功能测试，项目上线实施全过程。4.负责撰写产品说明文档，产品培训文档，协调运营人员推进产品的推广和使用。任职要求：1.本科及以上学历，计算机、物流、电子商务等相关专业；2.3年以上ERP、电商平台软件产品的规划、分析、设计、实施工作经验；3.优秀的产品规划和设计能力，可以产出高质量的PRD等标准产品文档；4.有责任心、执行力强、学习能力强。"1.计算机科学与技术、软件工程专业，本科以上，2年以上相关工作经验2.熟悉SQL数据库操作（MySQL，Oracle等）；3.了解并掌握Hadoop等开源分布式计算平台；4.了解并掌握云存储平台搭建；5.熟悉Java语言；6.有数据挖掘经验；7.熟悉hadoop、hbase、hive的原理并具备管理，配置，运维经验。"工作职责：1. 负责海量数据处理分布式平台以及数据分析系统2. 参与数据工具、ETL程序开发工作3. 参与大数据处理，算法实施等工作4. 参与数据分析平台的数据开发和调优工作任职资格：1. 本科及以上学历，计算机、数学及相关专业；2. 具有丰富的数据开发经验，对数据处理、数据分析等有深刻认识和实战经验 3. 熟悉主流的大数据产品和数据分析技术并具有相关项目经验4. 有大数据分析与数据仓库设计及开发经验5. 熟悉主流的开源大数产品，如Spark、hadoop、Hive、HBase、Kafka等6. 有数据挖掘、机器学习、推荐算法、人工智能、数学建模项目经验者优先7. 良好的沟通协调能力、学习能力、分析解决问题能力者优先备注：此岗位为上市公司金卡智能旗下子公司北京华思科互联网科技有限公司职位（详情请见www.eslink.cc，微信公众号：*****易联云），公司与阿里云合作共同打造公用事业行业SaaS云服务，致力于成为公用事业行业最有影响力的SaaS云服务平台，帮助公用事业企业为百姓创造便民、利民、惠民的互联网+城市服务环境。工作地点邻近阿里巴巴、海创园、梦想小镇，公司成员以80后为主90后为辅，工作氛围活跃且拼搏有干劲，2016年荣获蚂蚁金服“互联网+城市服务”金牌合作伙伴称号，在此你可享受上市公司的待遇和创业公司的上升空间，快来加入我们吧！"岗位描述：1、分析现有数据特点，应用机器学习方法，发现安全数据模式2、探索安全数据分析方法，定义未来数据分析方向3、与公司内其他部门、国内外其他安全组织合作，平滑完成数据交换4、定义新的数据分析方向，识别安全事件、给出事件处置模式和参考办法任职要求1、硕士及硕士以上学历，计算机相关或者数学相关专业2、两年以上大数据分析从业经验，有Hadoop平台实际操作经验3、扎实的Java或Python编程基础4、有极好的分析意识和能力5、良好的团队合作能力、创新能力加分项：最好有网络安全有粗略的背景知识，对安全有一定理解'
    #print('添加前：')
    #print("".join([(x + '/ ') for x in jieba.cut(test_sentence, cut_all=False) if x not in stopwords]))

    #for word in add_word.keys():
        #jieba.add_word(word)
    #print("添加后：")
    #print("".join([(x + '/ ') for x in jieba.cut(test_sentence, cut_all=False) if x not in stopwords]))
